#pragma once

#include "Event.h"
#include <sstream>

namespace Hazal
{
	class HZ_DLL_OPTION CWindowResizeEvent : public CEvent
	{
		EVEMT_CLASS_CATEGORY(E_EVENT_CATEGORY::E_EVENT_CAT_APPLICATION)

		EVENT_CLASS_TYPE(E_EVENT_WINDOW_RESIZE)

	public:
		CWindowResizeEvent(unsigned int unWidth, unsigned int unHeight) :
			m_unWidth(unWidth), m_unHeight(unHeight) {}

	public:
		std::string ToString() const override
		{
			std::stringstream ss;
			ss << "WindowResizeEvent: " << m_unWidth << ", " << m_unHeight;

			return ss.str();
		}

		inline unsigned int GetWidth() { return m_unWidth; }
		inline unsigned int GetHeight() { return m_unHeight; }

	private:
		unsigned int m_unWidth;	
		unsigned int m_unHeight;
	};

	class HZ_DLL_OPTION CWindowCloseEvent : public CEvent
	{
		EVEMT_CLASS_CATEGORY(E_EVENT_CATEGORY::E_EVENT_CAT_APPLICATION)

		EVENT_CLASS_TYPE(E_EVENT_WINDOW_CLOSE)

	public:
		CWindowCloseEvent(){}
	};

	class HZ_DLL_OPTION CAppTickEvent : public CEvent
	{
		EVEMT_CLASS_CATEGORY(E_EVENT_CATEGORY::E_EVENT_CAT_APPLICATION)

		EVENT_CLASS_TYPE(E_EVENT_APP_TICK)

	public:
		CAppTickEvent() {}
	};

	class HZ_DLL_OPTION CAppUpdateEvent : public CEvent
	{
		EVEMT_CLASS_CATEGORY(E_EVENT_CATEGORY::E_EVENT_CAT_APPLICATION)

		EVENT_CLASS_TYPE(E_EVENT_APP_UPDATE)

	public:
		CAppUpdateEvent() {}
	};

	class HZ_DLL_OPTION CAppRenderEvent : public CEvent
	{
		EVEMT_CLASS_CATEGORY(E_EVENT_CATEGORY::E_EVENT_CAT_APPLICATION)

		EVENT_CLASS_TYPE(E_EVENT_APP_RENDER)

	public:
		CAppRenderEvent() {}
	};
}